package com.thinkwide.data.core;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class MFStringList {
    private List strings = new ArrayList();
    private List objects = new ArrayList();
    private boolean sorted = false;

    public MFStringList() {
    }

    public String[] getStrings() {
        return (String[]) strings.toArray(new String[strings.size()]);
    }

    public void setStrings(String[] array) {
        strings = null;
        objects = null;
        strings = new ArrayList(Arrays.asList(array));
        objects = new ArrayList(array.length);
    }

    private void rangeCheck(int Index) throws IndexOutOfBoundsException {
        if ((Index < 0) || (Index >= getCount()))
            throw new IndexOutOfBoundsException();
    }

    public int getCount() {
        return strings.size();
    }

    public String Get(int Index) {
        return (String) strings.get(Index);
    }

    public int Find(String S) {

        return 0;
    }

    public int AddObject(String S, Object AObject) {
        int Result = -1;
        if (!sorted)
            Result = getCount();
        else
            Result = Find(S);
        InsertItem(Result, S, AObject);
        return Result;
    }

    public int Add(String S) {
        return AddObject(S, null);
    }

    public void AddStrings(MFStringList Strings) {
        for (int i = 0; i < Strings.getCount(); i++)
            Add(Strings.Get(i));
    }

    public void AddStrings(String[] Strings) {
        for (int i = 0; i < Strings.length; i++)
            Add(Strings[i]);
    }


    public void Clear() {
        strings.clear();
        objects.clear();
    }

    public void Delete(int Index) {
        strings.remove(Index);
        objects.remove(Index);
    }

    public void InsertItem(int Index, String S, Object AObject) {
        strings.add(Index, S);
        objects.add(Index, AObject);
    }

    public void Put(int Index, String S) throws IllegalStateException {
        if (this.sorted)
            throw new IllegalStateException("list sorted!");
        else
            strings.set(Index, S);
    }

    public void PutObject(int Index, Object AObject) {
        objects.set(Index, AObject);
    }

    public void Exchange(int Index1, int Index2) {
        Object temp = null;
        temp = strings.get(Index1);
        strings.set(Index1, strings.get(Index2));
        strings.set(Index2, temp);
        temp = objects.get(Index1);
        objects.set(Index1, objects.get(Index2));
        objects.set(Index2, temp);
    }

    public void QuickSort(int L, int R) {

    }

    public void SetSorted(boolean value) {
        if (value != sorted) {
            if (value)
                QuickSort(0, getCount() - 1);
            sorted = value;
        }
    }

    public int IndexOf(String S) {
        return strings.indexOf(S);
    }

    public String getTextStr() {
        StringBuffer Result = new StringBuffer();
        for (int i = 0; i < strings.size(); i++) {
            Result.append(Get(i));
            Result.append(MFSystem.line);
        }
        return Result.toString();
    }

    public void setTextStr(String value) {
        Clear();
        StringTokenizer tokenizer = new StringTokenizer(value, MFSystem.line);
        while (tokenizer.hasMoreTokens())
            Add(tokenizer.nextToken());
    }


}


